home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1998 #3 / Amiga Plus CD - 1998 - No. 3.iso / pd / spiele / adoom / src / amiga_system.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-12-31  |  4.3 KB  |  181 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdarg.h>
  6. #include <time.h>
  7.  
  8. #include <exec/exec.h>
  9. #include <proto/exec.h>
  10.  
  11. #include "doomdef.h"
  12. #include "m_misc.h"
  13. #include "i_system.h"
  14. #include "i_video.h"
  15. #include "i_sound.h"
  16.  
  17. #include "d_net.h"
  18. #include "g_game.h"
  19.  
  20. void amiga_getevents (void);
  21.  
  22. #define MIN_ZONESIZE  (2*1024*1024)
  23. #define MAX_ZONESIZE  (6*1024*1024)
  24.  
  25. /**********************************************************************/
  26. // Called by DoomMain.
  27. void I_Init (void)
  28. {
  29.   I_InitSound ();
  30.   //  I_InitGraphics ();
  31. }
  32.  
  33. /**********************************************************************/
  34. // Called by startup code
  35. // to get the ammount of memory to malloc
  36. // for the zone management.
  37. byte*    I_ZoneBase (int *size)
  38. {
  39.   byte *zone;
  40.   ULONG memfree, largest;
  41.  
  42.   memfree = AvailMem (MEMF_FAST);
  43.   largest = AvailMem (MEMF_FAST | MEMF_LARGEST);
  44.   printf ("Memfree = %d, largest = %d\n", memfree, largest);
  45.  
  46.   if (largest > MAX_ZONESIZE + 65536 &&
  47.       memfree > MAX_ZONESIZE + (2 * 1024 * 1024))
  48.     *size = MAX_ZONESIZE;
  49.   else if (memfree < largest + (2 * 1024 * 1024))
  50.     *size = memfree - (2 * 1024 * 1024) - 65536;
  51.   else
  52.     *size = largest - 65536;
  53.  
  54.   if (*size < MIN_ZONESIZE)
  55.     I_Error ("Unable to allocate at least %d fastmem for zone management\n"
  56.              "while leaving 2Mb fastmem free\n"
  57.              "Fastmem free = %d, largest block = %d",
  58.              MIN_ZONESIZE, memfree, largest);
  59.  
  60.   if ((zone = (byte *)malloc(*size)) == NULL)
  61.     I_Error ("malloc() %d bytes for zone management failed", *size);
  62.  
  63.   printf ("I_ZoneBase(): Allocated %d bytes for zone management\n", *size);
  64.  
  65.   return zone;
  66. }
  67.  
  68. /**********************************************************************/
  69. // Called by D_DoomLoop,
  70. // returns current time in tics.
  71. int I_GetTime (void)
  72. {
  73.   int newtics;
  74.   static int basetime=0;
  75.   unsigned int clock[2];
  76.  
  77.   timer (clock);
  78.   if (!basetime)
  79.     basetime = clock[0];
  80.   newtics = (clock[0]-basetime)*TICRATE + clock[1]*TICRATE/1000000;
  81.   return newtics;
  82. }
  83.  
  84. /**********************************************************************/
  85. //
  86. // Called by D_DoomLoop,
  87. // called before processing any tics in a frame
  88. // (just after displaying a frame).
  89. // Time consuming syncronous operations
  90. // are performed here (joystick reading).
  91. // Can call D_PostEvent.
  92. //
  93. void I_StartFrame (void)
  94. {
  95.   amiga_getevents ();
  96. }
  97.  
  98. /**********************************************************************/
  99. //
  100. // Called by D_DoomLoop,
  101. // called before processing each tic in a frame.
  102. // Quick syncronous operations are performed here.
  103. // Can call D_PostEvent.
  104. void I_StartTic (void)
  105. {
  106. }
  107.  
  108. /**********************************************************************/
  109. // Asynchronous interrupt functions should maintain private queues
  110. // that are read by the synchronous functions
  111. // to be converted into events.
  112.  
  113. // Either returns a null ticcmd,
  114. // or calls a loadable driver to build it.
  115. // This ticcmd will then be modified by the gameloop
  116. // for normal input.
  117. ticcmd_t    emptycmd;
  118. ticcmd_t* I_BaseTiccmd (void)
  119. {
  120.   return &emptycmd;
  121. }
  122.  
  123. /**********************************************************************/
  124. // Called by M_Responder when quit is selected.
  125. // Clean exit, displays sell blurb.
  126. void I_Quit (void)
  127. {
  128.   D_QuitNetGame ();
  129.   I_ShutdownSound();
  130.   I_ShutdownMusic();
  131.   M_SaveDefaults ();
  132.   I_ShutdownGraphics();
  133.   exit(0);
  134. }
  135.  
  136. /**********************************************************************/
  137. // Allocates from low memory under dos,
  138. // just mallocs under unix
  139. byte* I_AllocLow (int length)
  140. {
  141.   byte*    mem;
  142.  
  143.   if ((mem = (byte *)malloc (length)) == NULL)
  144.     I_Error ("Out of memory allocating %d bytes", length);
  145.   memset (mem,0,length);
  146.   return mem;
  147. }
  148.  
  149. /**********************************************************************/
  150. void I_Tactile (int on, int off, int total)
  151. {
  152.   // UNUSED.
  153.   on = off = total = 0;
  154. }
  155.  
  156. /**********************************************************************/
  157. void I_Error (char *error, ...)
  158. {
  159.   va_list    argptr;
  160.  
  161.   // Message first.
  162.   va_start (argptr, error);
  163.   fprintf (stderr, "Error: ");
  164.   vfprintf (stderr, error, argptr);
  165.   fprintf (stderr, "\n");
  166.   va_end (argptr);
  167.  
  168.   fflush (stderr);
  169.  
  170.   // Shutdown. Here might be other errors.
  171.   if (demorecording)
  172.     G_CheckDemoStatus ();
  173.  
  174.   D_QuitNetGame ();
  175.   I_ShutdownGraphics ();
  176.  
  177.   exit (20);
  178. }
  179.  
  180. /**********************************************************************/
  181.